#include<iostream>
using namespace std;
#include<pthread.h>
#include<unistd.h>
#include<semaphore.h>
/*互斥锁*/
pthread_mutex_t g_mutex;
/*信号量*/
sem_t g_sem;
/*打印机公共资源*/
void printer(const char *str)
{
    /*加锁-减1——P操作*/
    sem_wait(&g_sem);
    while(*str!='\0')
    {
        putchar(*str);
        fflush(stdout);
        str++;
        sleep(1);
    }
    /*解锁-加一-v操作*/
    sem_post(&g_sem);
}
/*线程回调函数*/
void *thread_func1(void*arg)
{
    /*线程分离*/
    pthread_detach(pthread_self());

    const char *str="helloworld.";
    // /*加锁*/
    // pthread_mutex_lock(&g_mutex);

    printer(str);

    // /*解锁*/
    // pthread_mutex_unlock(&g_mutex);

    /*线程退出*/
    pthread_exit(NULL);
}



void *thread_func2(void*arg)
{
    
    /*线程分离*/
    pthread_detach(pthread_self());
    //   /*加锁*/
    // pthread_mutex_lock(&g_mutex);

    const char *str="STM32F429IGT6";
    printer(str);

    //  /*解锁*/
    // pthread_mutex_unlock(&g_mutex);

    /*线程退出*/
    pthread_exit(NULL);
}
int main()
{
    // /*初始化锁*/
    // pthread_mutex_init(&g_mutex,NULL);

    /*初始化信号量*/
    sem_init(&g_sem,0,1);


    /*创建线程*/
    pthread_t tid1;
    int ret=pthread_create(&tid1,NULL,thread_func1,NULL);
    if(ret!=0)
    {
        perror("thread create error");
        _exit(-1);
    }

    pthread_t tid2;
    ret=pthread_create(&tid2,NULL,thread_func2,NULL);
    if(ret!=0)
    {
        perror("thread create error");
        _exit(-1);
    }

    int cnt=100;
    while(cnt--)
    {
        sleep(1);
    }
    // /*释放锁资源*/
    // pthread_mutex_destroy(&g_mutex);
    /*销毁信号量*/
    sem_destroy(&g_sem);










    return 0;
}